#include <stdlib.h>

typedef enum booleanos{
	false = 0,
	true = 1
}Bool;

typedef struct nodo{
	struct nodo* siguiente;
	void* elemento;
}Nodo;

typedef struct coleccion{
	Nodo* nodo;
}Coleccion;

Coleccion new();
int size(Coleccion);
Bool isNull(Nodo*);
Bool notNull(Nodo*);
Bool isEmpty(Coleccion);
Bool notEmpty(Coleccion);
Nodo* first(Coleccion);
Nodo* last(Coleccion);
Nodo* newNodo(void*);
void addElement(Coleccion*, void*);
void removeElement(Coleccion*, void*);
void forEach(Coleccion, void(void*));
Coleccion allButFirst(Coleccion);
Coleccion allButLast(Coleccion);
Coleccion map(Coleccion, void*(void*));
Coleccion filter(Coleccion, Bool(void*));
Coleccion concat(Coleccion, Coleccion);
void* concate(void*, void*);
void* foldl(Coleccion, void*, void*(void*, void*));
void* foldl1(Coleccion, void*(void*, void*));
